home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 351-375 / 359 / dice / dice.lzh / lib / amiga / resident.c < prev    next >
C/C++ Source or Header  |  1990-03-27  |  1KB  |  67 lines

  1.  
  2. /*
  3.  *  RESIDENT.C
  4.  *
  5.  *  (c)Copyright 1990, Matthew Dillon, All Rights Reserved
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <exec/execbase.h>
  10. #include <exec/ports.h>
  11. #include <exec/memory.h>
  12. #include <libraries/dos.h>
  13. #include <libraries/dosextens.h>
  14. #include <lib/bcpl.h>
  15.  
  16. typedef struct DosLibrary   DosLibrary;
  17. typedef struct RootNode     RootNode;
  18. typedef struct DosInfo        DosInfo;
  19. typedef struct CommandLineInterface CLI;
  20.  
  21. typedef struct MsgPort        MsgPort;
  22. typedef struct Message        Message;
  23. typedef struct Task        Task;
  24. typedef struct Process        Process;
  25.  
  26. typedef struct SegNode {
  27.     BPTR    NextEntry;
  28.     LONG    UseCount;
  29.     BPTR    SegPtr;
  30.     unsigned char    SegName[32];
  31. } SegNode;
  32.  
  33. extern struct ExecBase *SysBase;
  34. extern DosLibrary *DOSBase;
  35.  
  36. /*
  37.  *  Search the resident list for the specified command returning its segment.
  38.  *  case insensitive
  39.  */
  40.  
  41. BPTR
  42. _SearchResident(cmd)
  43. char *cmd;
  44. {
  45.     SegNode *node;
  46.     DosInfo *di = BTOC(((RootNode *)DOSBase->dl_Root)->rn_Info, DosInfo);
  47.     short len = strlen(cmd);
  48.  
  49.     Forbid();
  50.     for (node = BTOC(di->di_NetHand, SegNode); node; node = BTOC(node->NextEntry, SegNode)) {
  51.     if (node->SegName[0] == len) {
  52.         short i;
  53.         for (i = 0; i < len; ++i) {
  54.         if ((node->SegName[1+i] ^ cmd[i]) & ~0x20)
  55.             break;
  56.         }
  57.         if (i == len) {
  58.         Permit();
  59.         return(node->SegPtr);
  60.         }
  61.     }
  62.     }
  63.     Permit();
  64.     return(NULL);
  65. }
  66.  
  67.